import java.util.Vector;

public class Memoria {
	private UC uc;
	private REnd rend;
	private RDados rdados;
	static final public int tam = 65536;
	public short tabela[];
	public String instrucao[];
	private short valor;
	
	public Memoria(UC uc, REnd rend)
	{
		this.uc = uc;
		this.rend = rend;
		tabela = new short[tam];
		instrucao = new String[tam];
		/*
		tabela[0] = 1; // mov const r0
		tabela[1] = 32767;
		tabela[2] = 2; // mov const r1
		tabela[3] = 5;
		//tabela[4] = 3; // add (r1) r0
		tabela[4] = 5;
		*/
		//for(int i=0 ; i<tam ; i++) tabela[i] = (short) (2*i);
	}
	
	public void setRDados(RDados rdados)
	{
		this.rdados = rdados;
	}
	
	public void write()
	{
		int pos = rend.getValor();
		tabela[pos] =  rdados.getValor();
		System.out.println("Escrita: pos " + pos + " = " + tabela[pos]);
	}
	
	public void read()
	{
		try
		{
			valor = tabela[rend.getValor()];
		}
		catch(Exception e)
		{
			System.out.println("Index out of bounds on Memoria::read()");
		}
	}
	
	public void atualizarValor()
	{
		String control = uc.getSinais("Memoria");
		if(control.equals("0")) write();
		else if(control.equals("1")) read();
	}
	
	public short getValor()
	{
		return valor;
	}
	
	public void setTabela(Montador mnt)
	{
		for(int i=0 ; i<mnt.memoria.length ; i++)
		{
			tabela[i] = mnt.memoria[i];
			instrucao[i] = mnt.instrucao[i];
		}
	}
}
 
